{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# OpenCV Filters Webcam\n",
    "\n",
    "In this notebook, several filters will be applied to webcam images.\n",
    "\n",
    "Those input sources and applied filters will then be displayed either directly in the notebook or on HDMI output.\n",
    "\n",
    "To run all cells in this notebook a webcam and HDMI output monitor are required.  "
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 1. Start HDMI output \n",
    "### Step 1: Load the overlay"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "from pynq.overlays.base import BaseOverlay\n",
    "from pynq.lib.video import *\n",
    "base = BaseOverlay(\"base.bit\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Step 2: Initialize HDMI I/O"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "# monitor configuration: 640*480 @ 60Hz\n",
    "Mode = VideoMode(640,480,24)\n",
    "hdmi_out = base.video.hdmi_out\n",
    "hdmi_out.configure(Mode,PIXEL_BGR)\n",
    "hdmi_out.start()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "collapsed": false
   },
   "source": [
    "## 2. Applying OpenCV filters on Webcam input\n",
    "### Step 1: Specify webcam resolution"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "# camera (input) configuration\n",
    "frame_in_w = 640\n",
    "frame_in_h = 480"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Step 2: Initialize camera from OpenCV"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "capture device is open: True\n"
     ]
    }
   ],
   "source": [
    "import cv2\n",
    "\n",
    "videoIn = cv2.VideoCapture(0)\n",
    "videoIn.set(cv2.CAP_PROP_FRAME_WIDTH, frame_in_w);\n",
    "videoIn.set(cv2.CAP_PROP_FRAME_HEIGHT, frame_in_h);\n",
    "print(\"capture device is open: \" + str(videoIn.isOpened()))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Step 3: Send webcam input to HDMI output"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "collapsed": false
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "\n",
    "ret, frame_vga = videoIn.read()\n",
    "\n",
    "if (ret):\n",
    "    outframe = hdmi_out.newframe()\n",
    "    outframe[:] = frame_vga\n",
    "    hdmi_out.writeframe(outframe)\n",
    "else:\n",
    "    raise RuntimeError(\"Error while reading from camera.\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Step 4: Edge detection \n",
    "Detecting edges on webcam input and display on HDMI out."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Frames per second: 7.096439356531233\n",
      "Number of read errors: 0\n"
     ]
    }
   ],
   "source": [
    "import time\n",
    "\n",
    "num_frames = 20\n",
    "readError = 0\n",
    "\n",
    "start = time.time()\n",
    "for i in range (num_frames):   \n",
    "    # read next image\n",
    "    ret, frame_vga = videoIn.read()\n",
    "    if (ret):\n",
    "        outframe = hdmi_out.newframe()\n",
    "        laplacian_frame = cv2.Laplacian(frame_vga, cv2.CV_8U, dst=outframe)\n",
    "        hdmi_out.writeframe(outframe)\n",
    "    else:\n",
    "        readError += 1\n",
    "end = time.time()\n",
    "\n",
    "print(\"Frames per second: \" + str((num_frames-readError) / (end - start)))\n",
    "print(\"Number of read errors: \" + str(readError))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Step 5: Canny edge detection\n",
    "Detecting edges on webcam input and display on HDMI out.\n",
    "\n",
    "Any edges with intensity gradient more than maxVal are sure to be edges and those below minVal are sure to be non-edges, so discarded. Those who lie between these two thresholds are classified edges or non-edges based on their connectivity. If they are connected to “sure-edge” pixels, they are considered to be part of edges. Otherwise, they are also discarded. As we only need a single output channel reconfigure the HDMI output to work in grayscale mode. This means that our output frame is in the correct format for the edge detection algorith,"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Frames per second: 8.003659968333068\n",
      "Number of read errors: 0\n"
     ]
    }
   ],
   "source": [
    "num_frames = 20\n",
    "\n",
    "Mode = VideoMode(640,480,8)\n",
    "hdmi_out = base.video.hdmi_out\n",
    "hdmi_out.configure(Mode,PIXEL_GRAY)\n",
    "hdmi_out.start()\n",
    "\n",
    "start = time.time()\n",
    "for i in range (num_frames):\n",
    "    # read next image\n",
    "    ret, frame_webcam = videoIn.read()\n",
    "    if (ret):\n",
    "        outframe = hdmi_out.newframe()\n",
    "        cv2.Canny(frame_webcam, 100, 110, edges=outframe)\n",
    "        hdmi_out.writeframe(outframe)\n",
    "    else:\n",
    "        readError += 1\n",
    "end = time.time()\n",
    "\n",
    "print(\"Frames per second: \" + str((num_frames-readError) / (end - start)))\n",
    "print(\"Number of read errors: \" + str(readError))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Step 6: Show results\n",
    "Now use matplotlib to show filtered webcam input inside notebook."
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "collapsed": false
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\nrkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x302a55b0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "%matplotlib inline \n",
    "from matplotlib import pyplot as plt\n",
    "import numpy as np\n",
    "\n",
    "frame_canny = cv2.Canny(frame_webcam, 100, 110)\n",
    "plt.figure(1, figsize=(10, 10))\n",
    "frame_vga = np.zeros((480,640,3)).astype(np.uint8)\n",
    "frame_vga[:,:,0] = frame_canny\n",
    "frame_vga[:,:,1] = frame_canny\n",
    "frame_vga[:,:,2] = frame_canny\n",
    "plt.imshow(frame_vga)\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Step 7: Release camera and HDMI"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": [
    "videoIn.release()\n",
    "hdmi_out.stop()\n",
    "del hdmi_out"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {
    "collapsed": true
   },
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 1
}
